﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PhongMachTu.OConnection;
using PhongMachTu.OModel;
using System.Collections;

namespace PhongMachTu.OForm
{
    public partial class FormPrescription : Form
    {
        private ArrayList patients;
        private ArrayList diseases;
        private ArrayList medicines;
        private ArrayList viMeds;
        private Patient patient;
        private int closeID;

        public int CloseID
        {
            get { return closeID; }
            set { closeID = value; }
        }

        internal Patient Patient
        {
            get { return patient; }
            set { patient = value; }
        }
        private int curPaID;
        private int viID;
        private int vmeID;

        public int CurPaID
        {
            get { return curPaID; }
            set { curPaID = value; }
        }
        public FormPrescription()
        {
            InitializeComponent();
        }

        private void btnDelMed_Click(object sender, EventArgs e)
        {
            if (OSession.isLoggedIn())
            {
                bool a = DataManipulate.deleteViMed(vmeID);
                if (!a)
                {
                    MessageBox.Show("Xảy ra lỗi khi xóa, vui lòng thử lại!", "Lỗi");
                }
                else
                {
                    refreshListView();
                }
            }
            else
            {
                FormManager.prescriptionForm.Hide();
                FormManager.loginForm.Show();
                MessageBox.Show("Quá thời gian chờ cho phép, vui lòng đăng nhập lại");
            }
        }

        private void btnEditMed_Click(object sender, EventArgs e)
        {
            if (OSession.isLoggedIn())
            {
                if (txtQuantity.Text == "")
                {
                    MessageBox.Show("Chưa nhập số lượng thuốc", "Lỗi");
                    txtQuantity.Focus();
                }
                else
                {
                    int medID = int.Parse(cbMedicine.SelectedValue.ToString());
                    int quantity = int.Parse(txtQuantity.Text);
                    Medicine med = DataManipulate.getMedByID(medID);
                    bool a = DataManipulate.updateViMed(vmeID, quantity, medID, med.Price);
                    if (!a)
                    {
                        MessageBox.Show("Xảy ra lỗi khi sửa, vui lòng thử lại!", "Lỗi");
                    }
                    else
                    {
                        refreshListView();
                    }
                }
            }
            else
            {
                FormManager.prescriptionForm.Hide();
                FormManager.loginForm.Show();
                MessageBox.Show("Quá thời gian chờ cho phép, vui lòng đăng nhập lại");
            }
        }

        private void btnAddMed_Click(object sender, EventArgs e)
        {
            if (OSession.isLoggedIn())
            {
                if (cbMedicine.SelectedIndex < 0)
                {
                    MessageBox.Show("Chưa chọn thuốc", "Lỗi");
                    cbMedicine.Focus();
                }
                else if (txtQuantity.Text == "")
                {
                    MessageBox.Show("Chưa nhập số lượng thuốc", "Lỗi");
                    txtQuantity.Focus();
                }
                else
                {
                    int medID = int.Parse(cbMedicine.SelectedValue.ToString());
                    int quantity = int.Parse(txtQuantity.Text);
                    Medicine med = DataManipulate.getMedByID(medID);
                    bool check = DataManipulate.checkViMed(viID, medID);
                    if (check)
                    {
                        MessageBox.Show("Thông tin về loại thuốc này đã có trong đơn thuốc.", "Lỗi");
                    }
                    else
                    {
                        bool a = DataManipulate.saveViMed(viID, quantity, medID, med.Price);
                        if (!a)
                        {
                            MessageBox.Show("Xảy ra lỗi khi thêm, vui lòng thử lại!", "Lỗi");
                        }
                        else
                        {
                            refreshListView();
                        }
                    }
                }
            }
            else
            {
                FormManager.prescriptionForm.Hide();
                FormManager.loginForm.Show();
                MessageBox.Show("Quá thời gian chờ cho phép, vui lòng đăng nhập lại");
            }
        }

        private void FormPrescription_Load(object sender, EventArgs e)
        {
            loadData();
            //ẩn các control khi chưa lưu thông tin phiếu khám
            disableControl();
        }

        private void FormPrescription_FormClosing(object sender, FormClosingEventArgs e)
        {
            curPaID = 0;
            e.Cancel = true;
            cbFullName.Enabled = true;
            FormManager.prescriptionForm.Hide();
            if (closeID == 0)
            {
                FormManager.mainForm.Show();
            }
            else
            {
                FormManager.paInDayForm.Show();
            }
            cbFullName.Visible = true;
            txtFullname.Visible = false;
        }

        private void btnCreatePres_Click(object sender, EventArgs e)
        {
            if (OSession.isLoggedIn())
            {
                if (curPaID > 0)
                {
                    if (txtSymptoms.Text == "")
                    {
                        MessageBox.Show("Chưa nhập triệu chứng");
                        txtSymptoms.Focus();
                    }
                    else if (cbDisease.SelectedIndex < 0)
                    {
                        MessageBox.Show("Chưa chọn bệnh");
                        cbDisease.Focus();
                    }
                    else
                    {
                        //lưu thông tin khám bệnh của bệnh nhân hiện tại
                        viID = DataManipulate.saveVisit(curPaID, int.Parse(cbDisease.SelectedValue.ToString()), txtSymptoms.Text);
                        refreshListView();
                        //hiện các control về thuốc đồng thời ẩn các control thông tin bệnh nhân để lập đơn thuốc
                        enableControl();
                    }
                }
                else
                {
                    if (cbFullName.SelectedIndex < 0)
                    {
                        MessageBox.Show("Chưa chọn bệnh nhân");
                        cbFullName.Focus();
                    }
                    else if (txtSymptoms.Text == "")
                    {
                        MessageBox.Show("Chưa nhập triệu chứng");
                        txtSymptoms.Focus();
                    }
                    else if (cbDisease.SelectedIndex < 0)
                    {
                        MessageBox.Show("Chưa chọn bệnh");
                        cbDisease.Focus();
                    }
                    else
                    {
                        curPaID = (int)cbFullName.SelectedValue;
                        //lưu thông tin khám bệnh của bệnh nhân hiện tại
                        viID = DataManipulate.saveVisit(curPaID, int.Parse(cbDisease.SelectedValue.ToString()), txtSymptoms.Text);

                        //hiện các control về thuốc đồng thời ẩn các control thông tin bệnh nhân để lập đơn thuốc
                        enableControl();
                    }
                }
            }
            else
            {
                FormManager.prescriptionForm.Hide();
                FormManager.loginForm.Show();
                MessageBox.Show("Quá thời gian chờ cho phép, vui lòng đăng nhập lại");
            }
        }

        public void refreshListView()
        {
            lvMed.Items.Clear();
            viMeds = DataManipulate.getViMed(DataManipulate.getViID(curPaID));
            if (viMeds != null)
            {
                for (int i = 0; i < viMeds.Count; i++)
                {
                    int stt = i + 1;
                    VisitMedicine viMed = (VisitMedicine)viMeds[i];
                    string medicine = viMed.MedInfo.Name;
                    string unit = viMed.MedInfo.Unit.Name;
                    int quantity = viMed.Quantity;
                    string tusing = viMed.MedInfo.Using.Name;

                    ListViewItem item = new ListViewItem(stt.ToString());
                    item.SubItems.Add(medicine);
                    item.SubItems.Add(unit);
                    item.SubItems.Add(quantity.ToString());
                    item.SubItems.Add(tusing);
                    item.Tag = viMed;

                    lvMed.Items.Add(item);
                }
            }
        }

        public void refreshControl()
        {
            //Kiểm tra tồn tài biến curPaID
            if (curPaID != 0)
            {
                //cập nhật ngày khám
                txtDate.Text = DateTime.Now.ToString("dd/MM/yyyy");

                //set giá trị chọn mặc định cho các combobox
                cbDisease.SelectedIndex = -1;
                cbMedicine.SelectedIndex = -1;

                //set tên bằng tên đã chọn tại form trước
                cbFullName.SelectedValue = curPaID;
                cbFullName.Enabled = false;

                //gán lại giá trị trong listview
                refreshListView();

                //set các textbox bằng rỗng
                txtUsing.Text = "";
                txtUnit.Text = "";
                txtSymptoms.Text = "";
                txtQuantity.Text = "";

                //ẩn các control
                disableControl();
            }
            else
            {

                //set giá trị chọn mặc định cho các combobox
                cbDisease.SelectedIndex = -1;
                cbMedicine.SelectedIndex = -1;
                cbFullName.SelectedIndex = -1;

                //refresh lại listview
                lvMed.Items.Clear();

                //set các textbox bằng rỗng
                txtUsing.Text = "";
                txtUnit.Text = "";
                txtSymptoms.Text = "";
                txtQuantity.Text = "";

                //cập nhật ngày khám
                txtDate.Text = DateTime.Now.ToString("dd/MM/yyyy");

                //ẩn các control khi chưa lưu thông tin phiếu khám
                disableControl();
                txtSymptoms.Enabled = true;
                cbDisease.Enabled = true;

            }
        }

        private void cbMedicine_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbMedicine.SelectedIndex >= 0)
            {
                int index = cbMedicine.SelectedIndex;
                Medicine med = (Medicine)medicines[index];
                MedicineUnit unit = med.Unit;
                MedicineUsing use = med.Using;

                txtUnit.Text = unit.Name;
                txtUsing.Text = use.Name;
            }
        }

        private void lvMed_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvMed.SelectedItems.Count == 0) return;
            ListViewItem item = lvMed.SelectedItems[0];

            VisitMedicine viMed = (VisitMedicine)item.Tag;
            cbMedicine.SelectedValue = viMed.MedInfo.IdMedicine;
            txtQuantity.Text = viMed.Quantity.ToString();
            txtUnit.Text = viMed.MedInfo.Unit.Name;
            txtUsing.Text = viMed.MedInfo.Using.Name;
            vmeID = viMed.ID;

        }

        public void loadData()
        {
            //lấy dữ liệu vào combobox fullname
            patients = DataManipulate.getPatientList();
            cbFullName.DataSource = patients;
            cbFullName.DisplayMember = "Fullname";
            cbFullName.ValueMember = "PatienId";
            cbFullName.SelectedIndex = -1;

            //cập nhật ngày khám
            txtDate.Text = DateTime.Now.ToString("dd/MM/yyyy");

            //lấy dữ liệu vào combobox disease
            diseases = DataManipulate.getDiseaseList();
            cbDisease.DataSource = diseases;
            cbDisease.DisplayMember = "NameDisease";
            cbDisease.ValueMember = "IDDisease";
            cbDisease.SelectedIndex = -1;

            //lấy dữ liệu vào combobox medicine
            medicines = DataManipulate.getAllMedicine();
            cbMedicine.DataSource = medicines;
            cbMedicine.DisplayMember = "Name";
            cbMedicine.ValueMember = "IdMedicine";
            cbMedicine.SelectedIndex = -1;

            //set các textbox rỗng
            txtUnit.Text = "";
            txtUsing.Text = "";
        }

        private void disableControl()
        {
            btnCreatePres.Enabled = true;
            lvMed.Enabled = false;
            btnAddMed.Enabled = false;
            btnEditMed.Enabled = false;
            btnDelMed.Enabled = false;
            txtQuantity.Enabled = false;
            cbMedicine.Enabled = false;
            btnRefresh.Enabled = false;
        }

        private void enableControl()
        {
            lvMed.Enabled = true;
            btnAddMed.Enabled = true;
            btnEditMed.Enabled = true;
            btnDelMed.Enabled = true;
            txtQuantity.Enabled = true;
            cbMedicine.Enabled = true;
            cbFullName.Enabled = false;
            txtSymptoms.Enabled = false;
            cbDisease.Enabled = false;
            btnCreatePres.Enabled = false;
            btnRefresh.Enabled = true;
        }

        public void setForEdit(int visitID, DateTime viDate, string viSymptom, int viDisease)
        {
            txtDate.Text = viDate.ToString("dd/MM/yyyy");
            txtSymptoms.Text = viSymptom;
            txtSymptoms.Enabled = true;
            viID = visitID;
            cbDisease.SelectedValue = viDisease;
            cbDisease.Enabled = true;
            cbFullName.Visible = false;
            txtFullname.Visible = true;
            txtFullname.Text = patient.Fullname;
        }

        private void btnRefresh_Click(object sender, EventArgs e)
        {
            if (OSession.isLoggedIn())
            {
                curPaID = 0;
                cbFullName.Enabled = true;
                loadData();
                refreshControl();
            }
            else
            {
                FormManager.prescriptionForm.Hide();
                FormManager.loginForm.Show();
                MessageBox.Show("Quá thời gian chờ cho phép, vui lòng đăng nhập lại");
            }
        }
    }
}